// 引入defineStore用于创建store
import { defineStore } from 'pinia'
import { getToken, setToken, removeToken } from '@/utils/auth.js'
import { login, getInfo } from '@/api/user.js'
import router from '@/router'

export const useUserStore = defineStore('user', {
  state() {
    //真正存储数据的地方
    return {
      token: getToken(),
      userInfo: {},
    }
  },
  // 动作
  actions: {
    //登录
    login(userdata) {
      return new Promise((resolve, reject) => {
        login(userdata)
          .then((res) => {
            this.token = res.body
            sessionStorage.setItem('summary', res.body)
            setToken(res.body)
            resolve()
          })
          .catch((err) => {
            reject(err)
          })
      })
    },

    //登出
    logout() {
      return new Promise((resolve, reject) => {
        try {
          this.token = ''
          this.userInfo = {}
          removeToken()
          sessionStorage.clear()
          localStorage.clear()
          sessionStorage.clear()
          router.push('/login')
          location.reload()
          resolve()
        } catch (error) {
          reject(error)
        }
      })
    },

    // 获取用户信息
    getInfo() {
      return new Promise((resolve, reject) => {
        getInfo()
          .then((res) => {
            const { body } = res
            this.userInfo = body
            resolve(res)
          })
          .catch((error) => {
            reject(error)
          })
      })
    },
  },
  // 状态

  // 计算
  //概念：当`state`中的数据，需要经过处理后再使用时，可以使用`getters`配置。
  getters: {},
})
